package com.company;

/**
 * @author zhf
 * @date 2021/10/21
 */

import java.util.Arrays;
import java.util.Collection;
import java.util.Collections;

/**
 * 下一个更大得数
 */
public class nextNum {


    public static void main(String[] args) {
        int[] nums = new int[]{4,5,2,6,3,1};
        nextNum nextNum = new nextNum();

    }

    public void nextPermutation(int[] nums) {

        int right = nums.length - 2;
        int n = nums.length - 1;

        /*
        逆序寻找到数组中非递增的第一个元素的下标；
         */
        while (right >=0 && nums[right] >= nums[right+1]){
            right--;
        }


        if (right >= 0){

            /*
            逆序寻找到数组中第一个比right大的数；
             */
            while (n >= 0 && nums[right] >= nums[n]){
                n--;
            }

            swap(nums,right,n);
            reverse(nums,n);



        }
        else {
            Arrays.sort(nums);
        }

    }
    /*
    数组中指定的地方开始排序
     */
    public void reverse(int[] nums, int start) {
        int left = start, right = nums.length - 1;
        while (left < right) {
            swap(nums, left, right);
            left++;
            right--;
        }
    }
    /*
    交换两个数
     */
    public void swap(int[] nums, int i, int j) {
        int temp = nums[i];
        nums[i] = nums[j];
        nums[j] = temp;
    }
}
